package Robot;

import java.util.Stack;

import ManejoGeneral.*;
import ObjetosdelMapa.*;
import Recolectables.*;
import Terrenos.*;

public abstract class Robot {
	protected int Combustible;
	protected int MaxCombustible;
	protected int PosX;
	protected int PosY;
	protected int Direccion;
	protected Mapa map;
	protected Pincel brush;
	protected Puntaje puntos;
	protected Stack<ObjetoColeccionable> Baul;

	public boolean Avanzar(){
		int  Terr,Resis;
		boolean puede= true;

		Terr=TerrenoDelante().getConsumo();
		Resis=ObjetoDelante().GetResistencia();
		if ((Terr==-1)||(Resis!=0)|| (Terr==-2))
			puede=false;
		else
			if(Terr>Combustible)
				puede=false;
			else{
				//Combustible-=Terr;	
				if(Direccion==3){
                   
					PosX++;}

				else
					if(Direccion==9){

						PosX--;}
					else
						if(Direccion==0){

							PosY++;}

						else
							if(Direccion==6){	
								PosY--;}
			}
		return puede;}

	public boolean GirarDerecha(){
		boolean puede=true;
		int consumo;
		consumo=map.DevolverTerreno(PosX,PosY).getConsumo();
		if (consumo>Combustible)
			puede=false;
		else{
		Direccion= (Direccion +3)%12;
		//Combustible-=consumo;
		}
		return puede;
	}

	public boolean GirarIzquierda(){
		boolean puede=true;
		int consumo;
		consumo=map.DevolverTerreno(PosX,PosY).getConsumo();
		if (consumo>Combustible)
			puede=false;
		else{
		Direccion= (Direccion +9)%12;
		//Combustible-=consumo;
		}	
		
		return puede;
	}
	
	public void Recolectar(int PosX, int PosY){
	}
	public void Descargar(){}

	public void Pintar(int i){}

	public boolean ChequearFinal(){
		if(map.getPosxfinal()==PosX && map.getPosyfinal()==PosY )
			return true;
		else return false;
	}
	public int getCombustible(){
		return Combustible;
	}

	public int getDireccion(){
		return Direccion;
	}
	public int getX(){
		return PosX;
	}
	public int getY(){
		return PosY;
	}
	public Mapa getMapa(){
		return map;
	}
	public int getMaxCombustible(){
		return MaxCombustible;
	}

	public Objeto ObjetoDelante(){
		Objeto aux;	

		if (Direccion==3){
			aux=map.getLugar(PosX+1,PosY).getObjeto();
		}
		else
			if (Direccion==9){
				aux=map.getLugar(PosX-1,PosY).getObjeto();
			}
			else
				if(Direccion==6){
					aux=map.getLugar(PosX,PosY-1).getObjeto();
				}
				else
					aux=map.getLugar(PosX,PosY+1).getObjeto();

		return aux;
	}
	public Terreno TerrenoDelante(){
		Terreno aux;
		if (Direccion==3){
			aux=map.DevolverTerreno(PosX+1,PosY);
		}
		else
			if (Direccion==9){
				aux=map.DevolverTerreno(PosX-1,PosY);
			}
			else
				if(Direccion==6){
					aux=map.DevolverTerreno(PosX,PosY-1);
				}
				else
					aux=map.DevolverTerreno(PosX,PosY+1);

		return aux;

	}
	

	public void setMapa(Mapa map2) {map=map2;
		
	}
}
